package com.mrogrape.gui;

import java.awt.Frame;

import javax.swing.JDialog;

import com.mrogrape.gui.event.WizardPageChangeAdapter;
import com.mrogrape.gui.event.WizardPageData;
import com.mrogrape.util.StringUtils;

/**
 * 一个包装了PageContainer的便捷对话框。
 * 
 * @author Ice Spring
 *
 */
public class WizardDialog{

	/** serialVersionUID */
	private static final long serialVersionUID = 1L;

	/**
	 * 表示用户点击了完成按钮
	 */
	public static final int FINISH_OPTION = 1;

	/**
	 * 表示用户点击了取消按钮
	 */
	public static final int CANCEL_OPTION = 2;

	/**
	 * 显示对话框。
	 * 
	 * @param frame 父容器
	 * @param title 对话框的标题
	 * @param firstPage 首个显示的页面
	 * @param pageData 页面数据
	 * @return 用户执行的操作
	 */
	public int showDialog(Frame frame, String title, String firstPage, WizardPageData pageData){

		final JDialog dialog = new JDialog(frame, title, true);
		this.container = new WizardPageContainer(this.basePackage, firstPage, pageData);

		dialog.add(this.container);
		dialog.pack();

		this.container.addPageChangeListener(new WizardPageChangeAdapter(){

			@Override
			public void onCancel(WizardPageData pd) {

				WizardDialog.this.option = WizardDialog.CANCEL_OPTION;
				dialog.setVisible(false);
			}

			@Override
			public void onFinish(WizardPageData pd) {

				WizardDialog.this.option = WizardDialog.FINISH_OPTION;
				dialog.setVisible(false);
			}
		});

		dialog.setVisible(true);
		dialog.dispose();
		this.container.dispose();

		return this.option;
	}

	/**
	 * 构造一个PageDialog，并指定basePackage。
	 * 
	 * @param basePackage 基本包路径
	 */
	public WizardDialog(String basePackage){

		this.basePackage = StringUtils.nullToEmpty(basePackage);
	}

	/**
	 * 获取页面数据.
	 * @return
	 */
	public WizardPageData getPageData(){

		return this.container.getPageData();
	}

	private WizardPageContainer container;
	private String basePackage;
	private int option = 0;
}
